package models;

import java.sql.Date;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;

import play.db.DB;

public class Presenca {

	private int codigo_usuario;
	private int codigo_evento;
	
	public Presenca() {
		setCodigo_usuario(-1);
		setCodigo_evento(-1);
	}
	
	public Presenca(int codigo_usuario, int codigo_evento) {
		setCodigo_usuario(codigo_usuario);
		setCodigo_evento(codigo_evento);
	}
	
	public static List<Evento> consultaFrequencia(int codUsuario, Date dataInicial, Date dataFinal)
		throws SQLException {
		
		List<Evento> eventos = new ArrayList<Evento>();
		
		String cmd = "SELECT public.evento.codigo, public.evento.horario_inicial, "
			+ "public.evento.horario_final, public.evento.local, public.evento.descricao "
			+ "FROM public.presenca JOIN public.evento ON public.presenca.codigo_evento = public.evento.codigo "
			+ "WHERE public.presenca.codigo_usuario = " + Integer.toString(codUsuario) + " "
			+ "AND DATE(public.evento.horario_inicial) >= '" + dataInicial.toString() + "' "
			+ "AND DATE(public.evento.horario_inicial) <= '" + dataFinal.toString() + "' "
			+ "ORDER BY public.evento.horario_inicial";
		
		ResultSet rs = DB.executeQuery(cmd);
    	 	
    	while(rs.next()) {
    		Evento evento = new Evento(rs.getInt(1), rs.getTimestamp(2), rs.getTimestamp(3),
    				rs.getString(4), rs.getString(5));
    		eventos.add(evento);
    	}
    	
    	return eventos;
	}
	
	/**
     * Inserts the Presenca object in the DB
     */
    public void save() throws SQLException {
    	
    	DB.execute("INSERT INTO Presenca(codigo_usuario, codigo_evento) VALUES("
    			+ "'" + Integer.toString(this.codigo_usuario) + "',"
    			+ "'" + Integer.toString(this.codigo_evento) + "'"
    			+ ")");
    }
    
	/**
	 * @param codigo_usuario the codigo_usuario to set
	 */
	public void setCodigo_usuario(int codigo_usuario) {
		this.codigo_usuario = codigo_usuario;
	}
	/**
	 * @return the codigo_usuario
	 */
	public int getCodigo_usuario() {
		return codigo_usuario;
	}
	/**
	 * @param codigo_evento the codigo_evento to set
	 */
	public void setCodigo_evento(int codigo_evento) {
		this.codigo_evento = codigo_evento;
	}
	/**
	 * @return the codigo_evento
	 */
	public int getCodigo_evento() {
		return codigo_evento;
	}
}
